package xbdb

import "bytes"

//一条主键key
func (s *Select) GetPkKey(pkvalue []byte) (r []byte) {
	bSplit := []byte(Split)
	r = JoinBytes([]byte(s.Tbname), bSplit, pkvalue)
	return
}

//一条主键key，前缀匹配，仅当主键为字符串时有效
func (s *Select) GetPkKeyLike(pkvalue []byte) (r []byte) {
	r = s.GetPkKey(pkvalue)
	r = bytes.Trim(r, Split)
	return
}

//一条索引key
func (s *Select) GetIdxPrefixKey(idxfield, idxvalue, pkvalue []byte) (r []byte) {
	bSplit := []byte(Split)
	r = JoinBytes([]byte(s.Tbname), []byte(IdxSplit), idxfield, bSplit, idxvalue, bSplit, pkvalue)
	return
}

//一条组合索引key，GetIdxPrefixKey是一个值，GetIdxsPrefixKey是的多个值
func (s *Select) GetIdxsPrefixKey(idxfield, idxvalue [][]byte, pkvalue []byte) (r []byte) {
	bIdxSplit := []byte(IdxSplit)                //索引拼接分隔符
	idxfields := bytes.Join(idxfield, bIdxSplit) //只需将多个值拼接起来即可
	idxvalues := bytes.Join(idxvalue, bIdxSplit) //只需将多个值拼接起来即可
	r = s.GetIdxPrefixKey(idxfields, idxvalues, pkvalue)
	//bSplit := []byte(Split)
	//r = JoinBytes([]byte(s.Tbname), []byte(IdxSplit), idxfields, bSplit, idxvalues, bSplit, pkvalue)
	return
}

/*
//一条索引key
func (s *Select) GetIdxPrefixKey(idxfield, idxvalue, pkvalue []byte) (r []byte) {
	idxfields := bytes.Split(idxfield, []byte(","))
	idxvalues := bytes.Split(idxvalue, []byte(","))
	r = s.GetIdxsPrefixKey(pkvalue, idxfields, idxvalues)
	return
}
*/

/*

//一条组合索引key，GetIdxPrefixKey是一个值，GetIdxsPrefixKey是的多个值
func (s *Select) GetIdxsPrefixKey(pkvalue []byte, idxfields, idxvalues [][]byte) (r []byte) {
	bSplit := []byte(Split)
	bIdxSplit := []byte(IdxSplit) //索引拼接分隔符
	flen, ilen := len(idxfields), len(idxvalues)
	if flen != ilen {
		return
	}
	var idxfield, idxvalue []byte
	for i := 0; i < ilen; i++ {
		idxfield = idxfields[i] //JoinBytes(idxfields[i])
		idxvalue = idxvalues[i] //JoinBytes(idxvalues[i])
		if i != ilen-1 {
			idxfield = JoinBytes(idxfield, bIdxSplit)
			idxvalue = JoinBytes(idxvalue, bIdxSplit)
		}
	}
	r = JoinBytes([]byte(s.Tbname), bIdxSplit, idxfield, bSplit, idxvalue, bSplit, pkvalue)
	return
}


//一条组合索引key
func (s *Select) GetIdxsPrefixKey(pkvalue []byte, idxfields, idxvalues [][]byte) (r []byte) {
	bSplit := []byte(Split)
	flen, ilen := len(idxfields), len(idxvalues)
	if flen != ilen {
		return
	}
	var idxfield, idxvalue []byte
	for i := 0; i < ilen; i++ {
		idxfield = idxfields[i] //JoinBytes(idxfields[i])
		idxvalue = idxvalues[i] //JoinBytes(idxvalues[i])
		if i != ilen-1 {
			idxfield = JoinBytes(idxfield, []byte(IdxSplit))
			idxvalue = JoinBytes(idxvalue, []byte(IdxSplit))
		}
	}
	r = JoinBytes([]byte(s.Tbname), []byte(IdxSplit), idxfield, bSplit, idxvalue, bSplit, pkvalue)
	return
}


//根据主键获取表的一条记录（获取一个key的values）
func (s *Select) OneRecord(PKvalue []byte) (r *TbData) { //GetOneRecord
	r = s.Record(PKvalue)
	return
}
*/

//索引前缀，等于索引idxvalue
func (s *Select) GetIdxPrefix(idxfield, idxvalue []byte) (r []byte) {
	r = s.GetIdxPrefixKey(idxfield, idxvalue, []byte{}) //只需通过GetIdxPrefixKey，提供一个nil的pkvalue即可。
	/*
		bSplit := []byte(Split)
		r = JoinBytes([]byte(s.Tbname), []byte(IdxSplit), idxfield, bSplit, idxvalue, bSplit)
	*/
	return
}

//索引前缀，索引idxvalue也前缀匹配。即是sql的like语句
func (s *Select) GetIdxPrefixLike(idxfield, idxvalue []byte) (r []byte) {
	r = s.GetIdxPrefix(idxfield, idxvalue)
	r = bytes.Trim(r, Split)
	return
}
